home *** CD-ROM | disk | FTP | other *** search
- MAME and ROM Merging - Why and How
- ----------------------------------
- (Please send corrections and/or additions to dweston@globaldialog.com)
-
- To merge or not to merge?
-
- That seems to be the question on the minds of the emulation community of
- late.
-
- This document will attempt to explain the changes to the ROM files,
- including the reasoning behind the renaming, as well as what merging
- entails, the pros and cons associated with it, and how to go about
- accomplishing this task.
-
- Why -
-
- Recently, MAME has been taking greater lengths to document the hardware
- that the games run on. It started with printing out the CPU and sound
- chip information and now it has been extended to display the company and
- year information for each game. As a logical extension of that, the
- driver now also stores information about whether a game is a derivative,
- or clone, of another driver.
-
- To this end, MAME now supports several ways to load the ROM files it
- needs. To make it all work, MAME now follows a standard ROM naming
- procedure which was sorely lacking before. In a nutshell, for every ROM
- with a unique checksum, MAME now requires that it have a unique filename.
- This enables MAME to make sure it's loading the right ROM from the right
- place. For example, there are a ton of Galaxian games and clones. Before,
- they all had individual ROMs with names like galaxian.* and now they
- have names like superg.* etc. to differentiate between the sets.
-
- Related to that, MAME now assumes that the latest revision of a ROM set
- is the common name - the one that presumably contains bug fixes and was
- in the widest distribution. It will continue to follow this standard in
- the future. This is why, for example, the Asteroids ROM sets were
- renamed. The old set, asteroid was revision 1 and the alternate,
- asteroi2 was revision 2. They have been renamed to conform to the new
- standard, so that revision 1 is now called asteroi1 and revision 2 is
- asteroid.
-
- To this end, it became apparent early on that for games which are
- derivatives, a lot of redundant ROM information could be discarded since
- it was shared amongst the sets. By discarded, I mean that since MAME now
- knows that a game is a clone of another, it will use the ROMs from the
- main set in instances where the checksums are identical to those in the
- clone set. This has several consequences.
-
- 1. You can now remove these redundant ROMs from the clone sets. In doing
- so, you are not losing anything unique since the redundant ROMs are
- identical in every way to those in the main set. Deleting these ROMs is
- entirely optional.
-
- 2. You can optionally store all related ROMs into one folder or .zip
- file. Merging ROMs is entirely optional.
-
- If you choose to merge or delete any ROMs, you are risking compatibility
- problems with other emulators. If you intend to use games with MAME and
- another emulator, you are better off not merging or deleting until that
- other emulator supports the same features as MAME. The file merging.txt
- that comes with MAME explains any renaming you might have to do if you
- choose not to merge your ROM sets.
-
- Here is how MAME now looks for ROM files:
-
- 1. It looks in the directory for that ROM set for the files it needs.
- 2. If it doesn't find the files there and the game is a clone, it will
- then look in the directory of the main set for the ROM files.
- 3. If it doesn't find it there, it reports the ROM as missing.
-
- With these changes, you may find that some games, like the Popeye bootleg
- now require the non-working main set. At first glance, you may think this
- is a waste of space, but this isn't necessarily so. You can copy the ROMs
- needed for the bootleg Popeye from the main set and then delete the
- non-working main set. Alternatively, you can rename the ROMs in the
- bootleg set to match the names in the main set. The checksums are
- identical, so this doesn't change the gameplay at all.
-
- How -
-
- Some of you may decide to hold off merging your ROM sets for the time
- being.
- You should, however, prepare your ROM sets for the potential of merging.
- You see, the issue here is not just the merging of original games with
- clones and/or bootlegs, but renaming existing ROM sets as well. The
- merging of ROM sets is a two step process, and many folks are expressing
- concern over step two before completing step one.
-
- Before proceeding, I should point out that while step one of this process
- (the renaming of ROMs and/or ROM sets is mandatory (in order for games to
- work properly), step two (the merging of ROM sets), is *OPTIONAL*.
-
- Let me say that again...
-
- You *DO NOT* have to merge your ROM sets in order for the games to work
- properly.
- You *DO* however have to rename several ROMs and/or ROM sets in order for
- the games to work properly.
-
- Having said that, let's take a look at what needs to be done to make MAME
- work as expected.
-
- Step One - (ROM renaming)
-
- 1a - Audit your ROMs
- Use the VerifyROMs feature (Audit ROMs button in Mac MAME) within
- MAME to check your existing ROM Collection.
- Open and print the audit file with a word processor.
-
- 1b - Re download your ROM Sets
- Visit your favorite MAME site, audit printout in hand, and Re download
- the ROM sets that the MAME audit says you're having problems with.
- Replace the old ROM sets with the new ROM sets.
-
- 1c - Run the audit again.
- By this time, most of your ROM problems should be taken care of. If so,
- congratulations! You can skip ahead to step 1j! If you're still having
- problems, continue with the next step.
-
- 1d - Unzip the problem ROM set(s).
- You'll need to do this to work with the individual ROMs within a set.
-
- 1e - Print out a ROM List.
- Use the ListROMs feature to obtain a list of current correct ROM sets.
- Save and print this list.
-
- 1f - Rename your ROMs.
- Compare the contents of your ROM set(s) to the list you printed out.
- Correct any discrepancies with the names of the individual ROMs.
-
- 1g - Re zip your ROM sets.
- This step is optional. Mac users will need a utility that can create a
- .zip file
-
- 1h - Run the audit again.
-
- 1i - Repeat steps 1d through 1h until the audit reports no problems.
-
- 1j - Thank the administrator of the site from which you obtain your ROM
- sets.
- Maintaining a site that manages MAME ROM sets can be a thankless job. The
- fact that these folks continue to maintain these sites often amazes me.
- The administrators of Dave's Classics and Insert Coin for example, have
- done an incredible job of making sure that the ROM sets on these sites
- are accurate and complete. Somehow, I don't think a virtual pat on the
- back is too much to ask in return...
-
- Step Two - (ROM merging)
-
- (I feel compelled to point out again that this step is *OPTIONAL*)
-
- *DO NOT ATTEMPT THIS OPERATION UNLESS YOU HAVE COMPLETED STEP ONE!*
-
- 2a - Print the list
- Look in your Documentation directory. Find and print out the
- merged.txt document
-
- 2b - Backup Your ROM set(s)
- *THIS IS IMPORTANT!* If the following steps don't work, you'll have a
- backup of your working ROM set(s)
-
- 2c - Unzip the ROM set(s) you wish to merge
- Use the printout of merged.txt to determine which sets you will be
- working with. Don't worry about renaming individual ROMs, you did this in
- step one.
-
- 2d - Merge the ROMs
- Copy the contents of one ROM set into the other. Replace duplicate file
- names.
-
- 2e - Re zip the ROM set(s)
- Again, this step is optional. Mac users will need a utility that can
- create a .zip file
-
- 2f - Create a place holder for the front-end if necessary.
- In the Mac version of MAME, an empty folder or an alias with the name of the
- missing ROM set must be placed in the ROM directory so a selection will
- appear in the front end. You should check with the author of the front
- end you're using to see if this step is necessary.
-
- 2g - Run an audit
- If all has gone well, you should have no problems, if not, well, that's
- why you made a backup in step 2b...
-
- An Example of How You Can Store Your ROMs-
-
- Let's look at how the new loading scheme affects a ROM set, specifically Popeye.
- There are 2 Popeye sets: popeye (non-working) and popeyebl (working).
-
- You can store the ROMs for these games in several ways.
-
- Method 1: All the ROMs in both sets.
-
- This method is the most compatible with other emulators. It stores all the files
- needed in each directory or zip, even if it is the same for both sets. There is
- no merging here, just renaming. If you don't wish to take up space with the
- non-working popeye set, this is the way to go.
-
- popeye (main) popeyebl (clone)
- ------ --------
- c-7a po1
- c-7b po2
- c-7c po3
- c-7e po4
- po_d1-e1.bin
- v-5n v-5n
- v-1e v-1e
- v-1f v-1f
- v-1j v-1j
- v-1k v-1k
-
- Method 2: Only the unique ROMs in the clone set.
-
- Using this method, you can delete the duplicate files from the second set, thus
- saving space. MAME is smart enough to look in the main set for them. This method
- also gives your front-end something to list for the clone sets. This is partial
- merging.
-
- Unlike the first method, this method isn't guaranteed to work with other emulators.
-
- popeye (main) popeyebl (clone)
- ------ --------
- c-7a po1
- c-7b po2
- c-7c po3
- c-7e po4
- po_d1-e1.bin
- v-5n
- v-1e
- v-1f
- v-1j
- v-1k
-
- Method 2: All the ROMs in the Main Set
-
- Using this method, you can place all the unique ROMs in the main set and get
- rid of the second set altogether. This is a complete merge. You can split the
- ROMs into subdirectories inside the zip if you wish (i.e. "main" and "bootleg").
- MAME ignores any and all subdirectory names.
-
- If you keep all the ROMs in the main set and delete the "popeyebl" folder, you
- can still start MAME with "mame popeyebl" to play the bootleg set. You might need
- a placeholder for your front-end so it lists the bootleg set. Contact your
- front-end author for more information.
-
- Unlike the first method, this method isn't guaranteed to work with other emulators.
-
- popeye (main) popeyebl (clone)
- ------ --------
- c-7a (no ROMs at all)
- c-7b
- c-7c
- c-7e
-
- v-5n
- v-1e
- v-1f
- v-1j
- v-1k
-
- po1
- po2
- po3
- po4
- po_d1-e1.bin
-
- Common Misconceptions-
-
- * This new scheme is a waste of time.
- It is a pain in the butt, yes, but it's a necessary evil. Having a
- standard procedure for naming ROMs is a good thing. Remember, people who
- actually own the PCBs use the ROMs too so having consistent names helps
- them find what they need to repair a broken board.
-
- * If I merge ROMs, they won't work with other emulators.
- That's true. The simple solution is not to merge or delete the ROMs.
- Remember, deleting redundant ROMs or placing them into one zip file or folder is
- optional. If you anticipate using them with other emulators, then don't
- merge or delete anything. You will still have to go through the ROM
- renaming process.
-
- * No good will come of this
- This is untrue. While Nicola was going through all the ROM sets and
- comparing, he found several instances where a set had a bad ROM that has
- slipped through the cracks. This whole process has uncovered several bad
- ROMs that would have gone unnoticed otherwise.
-
- * It's not worth the space savings.
- Maybe it's not worth it for you, but some people appreciate it. There are
- two pros to this aspect - you save space, and the downloads for cloned or
- derivative sets are much shorter, particularly for large ROM sets like
- the CPS1 games. There are no cons to merging - if you don't want to, you
- don't have to do it. You can keep your old sets and take up all the space
- you want :)
-
- * It goes against MAME's goals as a documentation project.
- This isn't true. Since MAME strives to document as many aspects of the
- hardware as possible, keeping a list of clones is a natural extension of
- that process. MAME isn't forcing anyone to delete ROM files or break up
- their ROM sets if they don't want to. Remember, those steps are optional.
-
- * What are color PROMs and how do they fit into all of this?
- They are very small (usually 256 bytes or less) ROMs that contain the
- color data for a lot of games. In the past, MAME stored the data
- hardcoded into it's source. Now, MAME will start looking for these files
- with the rest of the ROMs. This is a Good Thing because it means that
- other emulators can use the files, as can people who actually own the
- arcade boards. Expect to see MAME complain about missing color PROMs in
- the future as more drivers are converted to load them from disk.
-
- * This is all a big conspiracy to eliminate the competition
- You've got us there. Despite the several compelling benefits (space
- savings, download time savings, documentation of clones, finding of bad
- ROMs), this is the true reason the changes were made. Yeah, That's it...
- (For the sarcasm-impaired, No this is not a big conspiracy to eliminate
- the competition...;-) )
-
- That's it!
- Feel free to copy this text and post it elsewhere if you should so desire.
-
-
-
- merged:
- -------
- 1942/1942 alternate
- exedexes/savgbees
- commando/commandj
- gng/gngcross/gngjap
- gunsmoke/gunsmrom/gunsmokj
- trojan/trojanj
- srumbler/srumblr2
- sidearms/sidearjp
- 1943/1943jap
- blktiger/blkdrgon
- ghouls/ghoulsj
- strider/striderj
- willow/willowj
- ffight/ffightj <- ffightj wrong, uses LOAD_EVEN/LOAD_ODD for gfx
- 1941/1941j
- mtwins/chikij
- msword/mswordj
- nemo/nemoj
- qbert/qbertjp (RENAME: all qbertjp/qb-XXX.bin -> qbj-XXX.bin)
- starforc/megaforc
- tutankhm/tutankst
- espial/espiale
- matmania/excthour (COPY: excthour/E9->matmania/K9-00 which had one bad bit)
- marble/marble2/marblea
- klax/klaxalt
- gauntlet/gauntir1/gauntir2/gaunt2p
- crbaloon/crbalon2
- panic/panica (RENAME: panica/spcpanic.1->panica.1 spcpanic.7->panica.7)
- mrdo/mrdot/mrlo/mrdu (RENAME: all mrlo/XX-NN.bin -> mrloNN.bin)
- docastle/docastl2 (EXCHANGE docastle.zip<->docastl2.zip. docastl2 was more complete)
- pleiads/pleitek (RENAME: pleiads.zip->pleiadce.zip pleitek.zip->pleiads.zip)
- phoenix/phoenixt/phoenix3 (RENAME: all phoenix3/phoenix.NN -> phoenix3.NN)
- cclimber/ccjap
- ckong and variations (this one is complex - just fetch the new set)
- swimmer/swimmera (COPY: swimmera/sw13 and sw14 to swimmer since they were bad there and
- RENAME all swimmera/swNN -> swaNN)
- shaolins/kicker (kicker is the main set, some ROMs in shaolins were bad)
- hbarrel/hbarrelj (RENAME hbarrel2.zip -> hbarrelj.zip)
- baddudes/drgninja
- hippodrm/ffantasy
- astrob/astrob1
- tempest/tempest1/tempest2 (fetch the new set)
- mappy/mappyjp
- yard/vsyard (RENAME: vsyard/yf-X-XX -> vyf-X-XX careful about names which look the
- same but are not)
- mpatrol/mpatrolw/mranger (RENAME: mpatrolw/mp-X.XX -> mpw-X.XX)
- kungfum/kungfub
- travrusa/motorace (RENAME:
- travrusa/zippyrac.002 -> mr8.3c
- travrusa/zippyrac.003 -> mr9.3a
- travrusa/zippyrac.004 -> mr10.1a)
- firetrap/firetpbl (NOTE: firetpbl/ft09.bin and ft10.bin were bad, however they are
- no longer used)
- circusc/circusc2
- congo/tiptop
- gladiatr/ogonsiro
- karnov/karnovj
- chelnov/chelnovj
- gyruss/gyrussce
- gberet/rushatck
- atetris/atetrisa/atetrisb
- spacfury/spacfura (RENAME spacfury.zip -> spacfura.zip, spacufrc.zip -> spacfury.zip)
- rygar/rygarj (RENAME all rygarj/cpu_XX.bin -> cpuj_XX.bin)
- pooyan/pootan
- gaiden/shadoww
- asteroid/asteroi1 (fetch the new set)
- llander/llander1 (fetch the new set)
- quantum/quantum1 (fetch the new set)
- mhavoc/mhavoc2/mhavocrv (fetch the new set)
- junglek/jhunt
- elevator/elevatob (NOTE: a couple of elevatob ROMs were bad, however they are no
- longer used)
- venture/venture2 (NOTE: venture2/vent_7a.vid was bad, however it is no longer used)
- tmnt/tmntj/tmht2p/tmnt2pj (use the tmnt_complete.zip set)
- xevious/xeviousa/sxevious (fetch the new set)
- superqix/sqixbl
- turtles/turpin
- bagman/bagmans
- robotron/robotryo
- joust/joustr/joustwr
- sinistar/oldsin
- bubbles/bubblesr (RENAME: bubblesr/bubbles.XXX -> bubblesr.XXX)
- colony7/colony7a
- superpac/superpcn
- mspacman/mspacatk
- trackfld/hyprolym (RENAME: hyprolym/XXX_YYY-bin -> hyprolym.XXX)
- rocnrope/ropeman
- slapfigh/slapbtjp/slapbtuk (fetch the new set)
- arkanoid/arknoidu/arkbl2/arkatayt
- jumpbug/jbugsega
- japirem/uniwars
- bublbobl/boblbobl/sboblbob
- popeye/popeyebl
- bosco/bosconm
- btime/btimea
- bnj/brubber/caractn
- timeplt/spaceplt (RENAME: spaceplt/tmX -> spX)
- rainbow/rainbowe
- chplft/chplftb/chplftbl (RENAME: chplftbl/7124.90 -> 7124bl.90)
- centiped/centipd2 (RENAME centipd1.zip -> centipd2.zip)
- digdug/digdugnm
- ddragon/ddragonb
- rastan/rastsaga (RENAME rastsaga/icXX_XX.bin -> rsXX_XX.bin)
- pacland/paclandn/paclanda (REPLACE: paclandn/pl1-8/9/10/11 with
- paclanda/pl1_08/09/10/11.bin, note that pl1-10 was bad.
- RENAME: paclandn/pl1-XX -> pln1-XX)
- stratgyx/stratgyb
- bzone/bzone2 (RENAME: bzone2/036414.01 -> 036414a.01)
- dkong/dkongjp
- dkongjr/dkjrjp/dkngjrjp/dkjrbl (RENAME: dkjrjp/dkj.5X -> dkjp.5X)
- mooncrst/mooncrsg/mooncrsb/fantazia/eagle (RENAME: mooncrsb/eprXXX -> beprXXX)
- nemesis/nemesuk (RENAME: nemesuk/XXXX.bin -> XXXX.uk)
- frogger/frogsega/frogger2
- galaga/galagamw/galagads/gallag/galagab2 (fetch the new set)
- galaxian/galmidw/galnamco/superg/galapx/galap1/galap4/galturbo (RENAME:
- galmidw/galaxian.X -> galmidw.X
- galnamco/galaxian.X -> galnamco.X
- superg/galaxian.X -> superg.X
- galturbo/galaxian.X -> galturbo.X)
- moonal2/moonal2b
- pengo/pengo2/pengo2u/penta
- xsleena/solarwar (there were several bad ROMs; fetch the new set)
- capbowl/clbowl (RENAME: clbowl/XX -> XX.cl
- lwings/lwingsjp
- missile/suprmatk (RENAME: suprmatk/XXXXXXXX.02 -> XXXXXXXX.sma)
-
- added PROMs:
- ------------
- vulgus
- sonson
- 1942
- exedexes
- commando
- gunsmoke
- 1943
- 1943kai
- mrdo (they are in the mrdo set)
- docastle (they are in the former docastl2 set, renamed to docastle)
- douni (they are in the douni set - different from docastle!!)
- nova2001 (they are in the nova20001 set)
- pleiads (they are in the former pleitek set, renamed to pleiads)
- phoenix (use the plaiads ones)
- thepit (they are in the thepit set)
- kungfum (they are in the kungfum set)
- gyruss (they are in the gyruss set)
- bagman/sbagman (they are in the new bagman set)
- arkanoid (they are in the arkanoid set)
- pacland (they are in the pacland set)
- dkongjr (they are in the dkjrbl set)
- frogger (they are in the frogger2 set)
- froggers (they are in the froggers set)
-